package com.hfb.mashibing.alip8.mq.rabbit.simple;

import static com.hfb.mashibing.alip8.mq.rabbit.simple.SimpleProducer.QUEUE_NAME;

import com.hfb.mashibing.alip8.mq.rabbit.util.ConnectionUtil;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import java.io.IOException;

/**
 * 在简单模式中，
 * 消费者消费消息
 */
public class SimpleConsumer {


    public static void main(String[] args) throws Exception {
        // 1、创建连接工厂
        // 2、创建连接（工具类）
        Connection connection = ConnectionUtil.getConnection();
        // 3、创建频道
        Channel channel = connection.createChannel();
        // 4、声明队列
        /**
         * 参数1-队列名称
         * 参数2-是否是持久化队列（消息回持久化在服务器上）
         * 参数3-是否独占本连接
         * 参数4-是否在不使用的时候队列自动删除
         * 参数5-其他参数
         */
        channel.queueDeclare(QUEUE_NAME,true,false,false,null);
        // 5、创建消费者，接收消息 & 处理
        DefaultConsumer defaultConsumer = new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                BasicProperties properties, byte[] body) throws IOException {
                super.handleDelivery(consumerTag, envelope, properties, body);
                // 路由key
                System.err.println("路由key："+envelope.getRoutingKey());
                // 交换机
                System.err.println("交换机："+envelope.getExchange());
                // 消息id
                System.err.println("消息id："+envelope.getDeliveryTag());
                // 接收到的消息
                System.err.println("接收到的消息是："+new String(body,"utf-8"));
            }
        };
        // 6、监听队列
        // 参数1-队列名
        // 参数2-是否要知道确认：
        //  true-消息接收到，自动恢复收到了，mq则建此消息从队列中删除
        //  false-手动确认
        // 参数3-消费者
        channel.basicConsume(QUEUE_NAME,true,defaultConsumer);
    }

}
